Animar sprites para juegos de móvil con Flash
Tal y como comenté en la charla sobre arte en videojuegos para móvil del CDV, cuando empezamos ha desarrollar juegos para móviles java hace cosa de 5 años, tuvimos que dar un nuevo enfoque a la animación de sprites debido a los altos requisitos de optimización de estos dispositivos.
Para animar cualquier sprite de la forma más óptima posible, es necesario:
- Los fotogramas de la animación (sprites) sin espacios en blanco. Cada sprite tiene el tamaño mínimo posible y normalmente cada uno tiene un tamaño diferente.
- Identificador o nombre de la animación (por ej., “prota_corre”, “prota_muere”, lo que sea…)
- Script de animación para definir la secuencia de fotogramas (Por ej., 1, 2, 1, 3, 2…), para no tener que repetir gráficos.
- Coordenadas de referencia para cada sprite. Esta coordenada dentro del sprite se utiliza para concatenar fotogramas de diferentes tamaños, además de ser utilizada por el programador para colocar el sprite en pantalla.
- Total independencia del programador. Si se consigue separar código y arte ¡es increíble lo que favorece la productividad!
Algunos fotogramas de la animación “andar” del juego Mr. Bean. Los puntos de referencia (en rojo).
Las dichosas coordenadas de referencia
Hay que tener en cuenta que cada sprite puede tener su coordenada de referencia en un lugar diferente.En este punto nos planteamos cómo disponer de dicha coordenada de forma visual y rápida, sin tener una incomoda y larga lista de coordenadas.
Lo más práctico y rápido en ese momento fue crear una 2ª imagen por cada sprite para indicar la coordenada (o coordenadas) mediante un pixel de color. Esa imagen se procesaría posteriormente para extraer la coordenada.
Esto nos permitía poder realizar montajes más complejos de animaciones dependientes unas de otras.
El fogonazo del fusil (b) y los casquillos (c) depeden automáticamente del fúsil (a) gracias a este sistema de puntos (Storm Gunner).
Y entonces llegó “Flash”…
Pronto este sistema no fue suficiente para crear animaciones más complejas. En ese momento se nos ocurrió usar directamente algún programa de animación. Flash fue la solución. Las ventajas son incalculables…
- Es el programa de animación más utilizado del mundo. El animador sólo se preocupa de animar. Aumenta el rendimiento y la producción se mejora.
- La especificación del los ficheros SWF es pública. Es posible extraer la información de coordenadas y sprites del fichero. (gracias Josep!)
- Permite reutilizar sprites.
- Permite las transformaciones básicas (rotaciones y volteos)
- Es posible combinar sprites con imágenes vectoriales.
- Es posible crear diferentes paquetes de gráficos mediante el uso de capas. Por ejemplo, si necesitamos eliminar cierta animación para un paquete de gráficos en concreto, sólo hay que colocarla en una capa y ocultarla antes de exportar.
- Todo el proceso es 100% independiente del programador. Se pueden hacer cambios de forma fácil y sencilla. Los cambios se puede probar al instante en el juego.
Sprites finales del protagonista de “Livingstone, Lost Again“.
Animación creada en Flash con sprites
No obstante, sigue siendo necesario disponer de un sencillo script para definir las animaciones y las secuencias de fotogramas:
STANLEY_IDLE = 1,1,1,1,1,2,3,3,3,3,3,2; //quieto STANLEY_WALK = 4-11; STANLEY_JUMP = 14-20; STANLEY_CHANGIDLE = 31,31-35,35,35,35-31; //colgado del techo quieto STANLEY_CHANG = 40-47; //techo moviéndose STANLEY_BHANGIDLE = 50,50,50-55,55,55,55-50; //colgado del borde quieto STANLEY_BHANG = 58-64,20; //colgado del borde salta STANLEY_SHOT = 23-29; //látigo STANLEY_CROUCH = 99, 102; //agachado STANLEY_CRAWL = 100-105,104,103,102,101; //arrastrándose STANLEY_WAKE = 102, 99; //levantarse STANLEY_WHANG = 110-116; //colgado del látigo STANLEY_CLIMB = 67,67,67,67-70,70,70,70,69,68; //enredadera quieto STANLEY_CLIMBH = 80-84; //enredadera horizontal STANLEY_CLIMBV = 88-93; //enredadera vertical STANLEY_JUMPSHOT = 123-128; //látigo saltando STANLEY_DIE = 132-137; //muerte
EL juego original fue uno de mis preferidos de la época, una pena que mi móvil sea una cacharra y que tampoco use el móvil para jugar. A ver si algun día sacais una version para GP2X o PC
Por cierto, me gustó la explicación de los sprites y el uso que le habéis dado a Flash para generarlo. Hace muchos años hice algo parecido pero usando el formato .CEL de Autodesk Animator
Use durante un tiempo Autodesk Animator (gran programa), aunque yo era más de Deluxe Paint Animator.
Incluso estuve cacharreando con algunos amigos el formato ANM de ese programa.
Enhorabuena por montar el sistema. Yo vi un sistema propietario de animaciones en Gameloft que basicamente venia a ser un entorno Flash especializado en montar animaciones, pero el desarrollo suposo mas de un año al programador.
Quizas en un futuro podriais poner a la venta el sistema y así se acabaria la pesadilla de muchos programadores para crear buenas animaciones para mobiles de manera optima.
muy interesante sobre los sprites……….tengo un proyecto para hacer un juego en flash, pero la extensión la tengo en swf y en as2…..como hago para que mi juego sea compatible con dispositvos moviles (sin usa flash lite)?????????
@santiago
Tienes que hacer un porting completo de ActionScript a Java MIDP…
Hola, me darías un ejemplo de ese “sencillo script”?
@Titin
He publicado el script utilizado para el protagonista